package com.star.controller.admin;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.star.pojo.Type;
import com.star.service.TypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import javax.validation.Valid;
import java.util.List;

/**
 * 分类管理控制器
 */
@Controller
@RequestMapping("/admin/types")

public class TypeController {

    @Autowired
    private TypeService typeService;

    /**
     *  分类列表
     */
    @GetMapping
    public String list(Model model,@RequestParam(defaultValue = "1",value = "pn") Integer pn){

        //后面紧跟着的一个查询就是分页查询，每页5条记录
        PageHelper.startPage(pn,5);
        //这个查询语句就是分页查询
        List<Type> list = typeService.getAllType();
        //将分页查询结果包装到分页插件提供的PageInfo类中，前台通过pageInfo即可获得所有的分页信息
        PageInfo pageInfo=new PageInfo(list,5);

        model.addAttribute("pageInfo",pageInfo);
        return "admin/types";
    }

    /**
     *  去新增分类页面
     */
    @GetMapping("/toAddType")
    public String toAddType(Model model){

        model.addAttribute("type", new Type());

        return "admin/types-input";
    }

    /**
     *  新增一个分类
     */
    @PostMapping("/addType")
    public String addType(@Valid Type type, RedirectAttributes attributes) {

        Type type1 = typeService.getTypeByName(type.getName());

        if (type1 != null) {
            attributes.addFlashAttribute("message", "不能添加重复的分类");
             return "redirect:/admin/types/toAddType";
        }
        int t = typeService.saveType(type);

        if (t == 0) {
            attributes.addFlashAttribute("message", "新增失败");
        } else {
            attributes.addFlashAttribute("message", "新增成功");
        }

        return "redirect:/admin/types";
    }

    /**
     * 去修改分类页面
     */
    @GetMapping("/toModifyType/{id}")
    public String toModifyType(@PathVariable Long id, Model model) {

        model.addAttribute("type", typeService.getType(id));

        return "admin/types-input";
    }

    /**
     * 修改分类信息
     */
    @PostMapping("/modifyType/{id}")
    public String modifyType(@Valid Type type, RedirectAttributes attributes) {

        Type type1 = typeService.getTypeByName(type.getName());

        if (type1 != null) {
            attributes.addFlashAttribute("message", "不能添加重复的分类");
             return "redirect:/admin/types/toAddType";
        }

        int t = typeService.updateType(type);

        if (t == 0 ) {
            attributes.addFlashAttribute("message", "编辑失败");
        } else {
            attributes.addFlashAttribute("message", "编辑成功");
        }

        return "redirect:/admin/types";
    }

    /**
     * 删除一个分类
     */
    @GetMapping("/deleteType/{id}")
    public String deleteType(@PathVariable Long id,RedirectAttributes attributes) {

        typeService.deleteType(id);

        attributes.addFlashAttribute("message", "删除成功");

        return "redirect:/admin/types";
    }
}